
#include <iostream>
#include <cassert>
#include <chrono>
#include <vector>

#include <Eigen/Dense>
using namespace std;
using namespace std::chrono;
using namespace Eigen;
using Eigen::MatrixXd;

// #define ROW_
// #define _PTR_
#define COL_

/**
 * @brief  测试 struct 和 数组那个有效果
 * 
 * array  |  struct
 * 10000000
 * 0.22 | 0.22
 * 1e8
 * 2.15 | 2.10
 * -O1
 * 0.91 | 0.91
 * -O2
 * 一样
 * @return 两者效率相同
 */

int main()
{

    constexpr int num{20000};
#ifdef ROW_
    MatrixXd arr(num, num);
    auto t1 = steady_clock::now();

    for (int i = 0; i < num; ++i)
    {
        for(int j = 0; j < num; ++j)
        {
            arr(i, j) = i*j;
        }
    }
    auto t2 = steady_clock::now();

#else
    MatrixXd arr(num, num);
    auto t1 = steady_clock::now();

    for (int j = 0; j < num; ++j)
    {
        for(int i = 0; i < num; ++i)
        {
            arr(i, j) = i*j;
        }
    }
    auto t2 = steady_clock::now();;
#endif
    duration<double> dt = duration_cast<duration<double>>(t2 - t1);
    cout << "\n"
         << dt.count() << "\n";
    return 0;
}